// 加载开源组件
import Vue from 'vue'
import ElementUI from 'element-ui'
import VueI18n from 'vue-i18n'
import App from './App.vue'
import contentMenu from 'v-contextmenu'
import 'v-contextmenu/dist/index.css'

// 加载样式
import 'element-ui/lib/theme-chalk/index.css'   // 默认主题
import './assets/css/icon.css'
import './assets/css/contextmenu/tree.css'      // 树用的右键菜单
import './assets/css/contextmenu/tag.css'       // 标签页用的右键菜单

// 加载自己实现的组件
import constant from './constant'               // 全局静态字符串
import bus from './utils/bus'                   // 单独事件监听
import i18n from './i18n'                       // 国际化
import storage from './utils/storage'           // 存储
import service from './service'                 // api服务层
import icons from './icons'                     // svg图标
import store from './store/index'               // vue-store，直接加载modules内的所有js
import router from './router'                   // 基础路由
import './components/directives'                // 拖拽组件

if (process.env.VUE_APP_MOCK) {
    const { mockXHR } = require('./mock')
    mockXHR()
}

// Vue内容扩展
Vue.prototype.$constant = constant
Vue.prototype.$bus = bus
Vue.use(VueI18n);
Vue.use(ElementUI, {
    size: 'small'
});
Vue.prototype.$storage = storage
Vue.prototype.$service = service
Vue.prototype.$icons = icons
Vue.config.productionTip = false;
Vue.use(contentMenu)

// 一些需要快速使用的方法
Vue.prototype.$clone = function(val) {
    return JSON.parse(JSON.stringify(val))
}

// 调用 app/appLoad（主要是加载路由用的）后再设置Vue
store.dispatch('app/appLoad').then(() => {
    new Vue({
        router,
        i18n,
        store,
        render: h => h(App)
    }).$mount('#app')
})
